The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices that may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago. One significant advance in computer technology is the development of parallel processing, i.e., the performance of multiple tasks in parallel.
A number of computer software and hardware technologies have been developed to facilitate increased parallel processing. From a hardware standpoint, computers increasingly rely on multiple microprocessors to provide increased workload capacity. Furthermore, some microprocessors have been developed that support the ability to execute multiple threads in parallel, effectively providing many of the same performance gains attainable through the use of multiple microprocessors. From a software standpoint, multithreaded operating systems and kernels have been developed, which permit computer programs to concurrently execute in multiple threads, so that multiple tasks can essentially be performed at the same time.
In addition, some computers implement the concept of logical partitioning, where a single physical computer is permitted to operate essentially like multiple and independent virtual computers, referred to as logical partitions, with the various resources in the physical computer (e.g., processors, memory, and input/output devices) allocated among the various logical partitions. Each logical partition executes a separate operating system, and from the perspective of users and of the software applications executing on the logical partition, operates as a fully independent computer.
Because each logical partition is essentially competing with other logical partitions for the limited resources of the computer, users are especially interested in monitoring the partitions in order to ensure that they are achieving satisfactory performance. A performance data collection tool that collects detailed performance metrics is often used for this purpose. Since the tool executes on the computer system using the same resources that the partitions may also use, the tool impacts the performance that it is measuring. In order to account for this performance impact and provide an accurate portrayal of the performance characteristics of the computer system being analyzed, the tool needs to accurately quantify the effects that the tool itself has on the collected metrics.
Current performance data collection tools use static compensation values to adjust the collected metrics in order to account for the performance impact of the tools. But, because of the dynamic nature of resource allocation between logical partitions, the environment in which the tool is executing and which the tool is measuring can change quickly and dramatically. Thus, static compensation values might not always provide the desired degree of accuracy.
Without a better technique for adjusting collected performance metrics based on the environment that exists at the time of the collection activity, users will continue to suffer from performance metrics that do not provide the desired degree of accuracy. Although the aforementioned problems have been described in the context of a logically partitioned computer system, they may occur in any environment in which the characteristics of the system being measured can change.